#include <iostream>
using namespace std;

#define MAX_N 3100000
// 每个节点最多可以有2子节点
int node[MAX_N + 5][2];
// 节点数量
int cnt = 1;
// 根节点序号
int root = 1;


void insert(int x) {
    int p = root;
    for (int i = 30; i >= 0; i--) {
        // 判断x的从右开始第i位是否为1
        int ind = !!(x & (1 << i));
        if (node[p][ind] == 0) node[p][ind] = ++cnt;
        p = node[p][ind];
    }
    return ;
}

int query(int x) {
    int ans = 0, p = root;
    for (int i = 30; i >= 0; i--) {
        int ind = !!(x & (1 << i));
        if (node[p][1 - ind] != 0) {
            ans |= (1 << i);
            p = node[p][1 - ind];
        } else {
            p = node[p][ind];
        }
    }
    return ans;
}

// 建立字典树，存储数字的二进制值，然后寻找每个数字的二进制对应的最大异或数字
int main() {
    int n, ans = 0, temp;
    scanf("%d", &n);
    for (int i = 0, a; i < n; i++) {
        scanf("%d", &a);
        insert(a);
        temp = query(a);
        ans = max(ans, temp);
    }
    printf("%d\n", ans);
    return 0;
}